// Wie schnell wird bewegt, rotiert, gekippt
var Sensibilitaet : float = 3000;

 @ HideInInspector
var YRotation : float;
 @ HideInInspector
var XRotation : float;
 @ HideInInspector
var CurrentYRotation : float;
 @ HideInInspector
var CurrentXRotation : float;

 @ HideInInspector
var YRotationGeschwindigkeit : float;
 @ HideInInspector
var XRotationGeschwindigkeit : float;

// Rotationsgeschwindigkeit
var CameraRotationSpeed : float = 50000;
// Neigungsgeschwindigkeit
var CameraTiltSpeed : float = 50000;

// Einschraenkung fur die Blickwinkel, damit man sich nicht
// auf den Kopf dreht oder in den Himmel schaut.
var MaxCameraAngle : float = 40;
var MinCameraAngle : float = 50;

// Glaettungsfaktor zum Abrunden der Bewegung in SmoothDamp
var Glaettungsfaktor : float = 0.2;

function Awake(){
		YRotation += 190;
}

function Update() {

	// Rotate: Kamera mit "E" nach rechts richten
	if (Input.GetKey(KeyCode.E)) {
		YRotation += 75 * Time.deltaTime;
	}
	// Rotate: Kamera mit "Q" nach links richten
	if (Input.GetKey(KeyCode.Q)) {
		YRotation -= 75 * Time.deltaTime;
	}

	// Tilt: Kamera mit "X" nach unten richten
	if (Input.GetKey(KeyCode.X)) {
		XRotation += CameraTiltSpeed * Sensibilitaet;
	}

	// Tilt: Kamera mit "Z" nach oben richten
	if (Input.GetKey(KeyCode.Z)) {
		XRotation -= CameraTiltSpeed * Sensibilitaet;
	}

	// Mouse-Controlls

	// Mausrad ist (2). Das Gedrueckt halten und durch die Inputs-Rotation aendern
	if (Input.GetMouseButton(2)) {
		YRotation += Input.GetAxis("Mouse X") * Sensibilitaet;
		XRotation += Input.GetAxis("Mouse Y") * Sensibilitaet;
	}
	// Alternativ mit gedruecktem "R", falls kein Mausrad vorhanden
	if (Input.GetKey(KeyCode.R)) {
		YRotation += Input.GetAxis("Mouse X") * Sensibilitaet;
		XRotation += Input.GetAxis("Mouse Y") * Sensibilitaet;
	}

	// Clamp stellt sicher, dass die Min
	XRotation = Mathf.Clamp(XRotation, MaxCameraAngle, MinCameraAngle);

	CurrentXRotation = Mathf.SmoothDamp(CurrentXRotation, XRotation, XRotationGeschwindigkeit, Glaettungsfaktor);
	CurrentYRotation = Mathf.SmoothDamp(CurrentYRotation, YRotation, YRotationGeschwindigkeit, Glaettungsfaktor);

	// Unity handhabt Rotationen intern als Quaternions. Dieses fuer die neuen Werte
	// erzeugen und in den Transform uebertragen.
	transform.rotation = Quaternion.Euler(CurrentXRotation, CurrentYRotation, 0);
}
